--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
admin/migrate.py main (dac94b89) Text, 5.70 KB
T8b949e#!/usr/bin/env python3
T8b949e# nomadForum - a forum on the NomadNetwork
T8b949e# Copyright (C) 2023-2026 AutumnSpark1226
T8b949e#
T8b949e# This program is free software: you can redistribute it and/or modify
T8b949e# it under the terms of the GNU General Public License as published by
T8b949e# the Free Software Foundation, either version 3 of the License, or
T8b949e# (at your option) any later version.
T8b949e#
T8b949e# This program is distributed in the hope that it will be useful,
T8b949e# but WITHOUT ANY WARRANTY; without even the implied warranty of
T8b949e# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
T8b949e# GNU General Public License for more details.
T8b949e#
T8b949e# You should have received a copy of the GNU General Public License
T8b949e# along with this program. If not, see <https://www.gnu.org/licenses/>.
Tff7b72import T7ee787os
Tff7b72import T7ee787sys
Tff7b72import T7ee787manage
Tff7b72def Td2a8ffperform_migrationsTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72global Te6edf3current_db_version
Te6edf3current_db_version Tff7b72= Tffa657intTb4b4b4(
Te6edf3mainTff7b72.Td2a8ffquery_databaseTb4b4b4(Ta5d6ff"Ta5d6ffSELECT value FROM settings WHERE key = Ta5d6ff'Ta5d6ffdb_versionTa5d6ff'Ta5d6ff"Tb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]
Tb4b4b4)
Tff7b72if Te6edf3current_db_version Tff7b72== Te6edf3confTff7b72.Td2a8ffDB_VERSIONTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffDoneTa5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffCurrent database version: Tffd700{Te6edf3current_db_versionTffd700}Ta5d6ff"Tb4b4b4)
Tff7b72elif Te6edf3current_db_version Tff7b72== T79c0ff0Tb4b4b4:
T8b949e# add columns to users table
Te6edf3mainTff7b72.Td2a8ffexecute_sqlTb4b4b4(Ta5d6ff"Ta5d6ffALTER TABLE users ADD about TEXT NOT NULLTa5d6ff"Tb4b4b4)
Te6edf3mainTff7b72.Td2a8ffexecute_sqlTb4b4b4(Ta5d6ff"Ta5d6ffALTER TABLE users ADD show_online INTEGER DEFAULT 0 NOT NULLTa5d6ff"Tb4b4b4)
Te6edf3mainTff7b72.Td2a8ffexecute_sqlTb4b4b4(Ta5d6ff"Ta5d6ffALTER TABLE users ADD default_styling TEXT NOT NULLTa5d6ff"Tb4b4b4)
T8b949e# set display_name
Te6edf3mainTff7b72.Td2a8ffexecute_sqlTb4b4b4(Ta5d6ff"Ta5d6ffUPDATE users SET display_name = username, about = Ta5d6ff'Ta5d6ffNoneTa5d6ff'Ta5d6ff"Tb4b4b4)
T8b949e# add columns to posts table
Te6edf3mainTff7b72.Td2a8ffexecute_sqlTb4b4b4(Ta5d6ff"Ta5d6ffALTER TABLE posts ADD edited INTEGER DEFAULT 0 NOT NULLTa5d6ff"Tb4b4b4)
Te6edf3mainTff7b72.Td2a8ffexecute_sqlTb4b4b4(Ta5d6ff"Ta5d6ffALTER TABLE posts ADD created INTEGER DEFAULT 0 NOT NULLTa5d6ff"Tb4b4b4)
Te6edf3mainTff7b72.Td2a8ffexecute_sqlTb4b4b4(Ta5d6ff"Ta5d6ffALTER TABLE posts ADD last_action INTEGER DEFAULT 0 NOT NULLTa5d6ff"Tb4b4b4)
T8b949e# add data to them
Te6edf3mainTff7b72.Td2a8ffexecute_sqlTb4b4b4(Ta5d6ff"Ta5d6ffUPDATE posts SET created = changed, last_action = changedTa5d6ff"Tb4b4b4)
T8b949e# add columns to comments table
Te6edf3mainTff7b72.Td2a8ffexecute_sqlTb4b4b4(Ta5d6ff"Ta5d6ffALTER TABLE comments ADD edited INTEGER DEFAULT 0 NOT NULLTa5d6ff"Tb4b4b4)
Te6edf3mainTff7b72.Td2a8ffexecute_sqlTb4b4b4(Ta5d6ff"Ta5d6ffALTER TABLE comments ADD created INTEGER DEFAULT 0 NOT NULLTa5d6ff"Tb4b4b4)
T8b949e# add data to them
Te6edf3mainTff7b72.Td2a8ffexecute_sqlTb4b4b4(Ta5d6ff"Ta5d6ffUPDATE comments SET created = changedTa5d6ff"Tb4b4b4)
T8b949e# encrypt remote_id in connections table
Te6edf3query_results Tff7b72= Te6edf3mainTff7b72.Td2a8ffquery_databaseTb4b4b4(
Ta5d6ff"Ta5d6ffSELECT conn_id, remote_id FROM connectionsTa5d6ff"
Tb4b4b4)
Tff7b72for Te6edf3data Tff7b72in Te6edf3query_resultsTb4b4b4:
Te6edf3mainTff7b72.Td2a8ffexecute_sqlTb4b4b4(
Ta5d6fffTa5d6ff"Ta5d6ffUPDATE connections SET remote_id = Ta5d6ff'Tffd700{Te6edf3mainTff7b72.Td2a8ffencryptTb4b4b4(Te6edf3dataTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4)Tffd700}Ta5d6ff'Ta5d6ff WHERE conn_id = Tffd700{Te6edf3dataTb4b4b4[T79c0ff0Tb4b4b4]Tffd700}Ta5d6ff"
Tb4b4b4)
T8b949e# change database version
Te6edf3mainTff7b72.Td2a8ffexecute_sqlTb4b4b4(Ta5d6ff"Ta5d6ffUPDATE settings SET value = 1 WHERE key = Ta5d6ff'Ta5d6ffdb_versionTa5d6ff'Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffDatabase upgraded to version 1Ta5d6ff"Tb4b4b4)
T8b949e# run the function again (will perform migrations to next version if available)
Te6edf3perform_migrationsTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3current_db_version Tff7b72== T79c0ff1Tb4b4b4:
T8b949e# add verified to connections
Te6edf3mainTff7b72.Td2a8ffexecute_sqlTb4b4b4(
Ta5d6ff"Ta5d6ffALTER TABLE connections ADD verified INTEGER DEFAULT 0 NOT NULLTa5d6ff"
Tb4b4b4)
T8b949e# set all existing connections as verified
Te6edf3mainTff7b72.Td2a8ffexecute_sqlTb4b4b4(Ta5d6ff"Ta5d6ffUPDATE connections SET verified = 1Ta5d6ff"Tb4b4b4)
T8b949e# change database version
Te6edf3mainTff7b72.Td2a8ffexecute_sqlTb4b4b4(Ta5d6ff"Ta5d6ffUPDATE settings SET value = 2 WHERE key = Ta5d6ff'Ta5d6ffdb_versionTa5d6ff'Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffdatabase upgraded to version 2Ta5d6ff"Tb4b4b4)
T8b949e# run the function again (will perform migrations to next version if available)
Te6edf3perform_migrationsTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3current_db_version Tff7b72== T79c0ff2Tb4b4b4:
T8b949e# set the default value
Te6edf3mainTff7b72.Td2a8ffexecute_sqlTb4b4b4(Ta5d6ff"Ta5d6ffUPDATE users SET default_styling = Ta5d6ff'Ta5d6ffNoneTa5d6ff'Ta5d6ff"Tb4b4b4)
T8b949e# change database version
Te6edf3mainTff7b72.Td2a8ffexecute_sqlTb4b4b4(Ta5d6ff"Ta5d6ffUPDATE settings SET value = 3 WHERE key = Ta5d6ff'Ta5d6ffdb_versionTa5d6ff'Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffdatabase upgraded to version 3Ta5d6ff"Tb4b4b4)
T8b949e# run the function again (will perform migrations to next version if available)
Te6edf3perform_migrationsTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3current_db_version Tff7b72== T79c0ff3Tb4b4b4:
T8b949e# remove link_id from users
Te6edf3mainTff7b72.Td2a8ffexecute_sqlTb4b4b4(Ta5d6ff"Ta5d6ffALTER TABLE users DROP COLUMN link_idTa5d6ff"Tb4b4b4)
T8b949e# remove login_time from users
Te6edf3mainTff7b72.Td2a8ffexecute_sqlTb4b4b4(Ta5d6ff"Ta5d6ffALTER TABLE users DROP COLUMN login_timeTa5d6ff"Tb4b4b4)
T8b949e# change database version
Te6edf3mainTff7b72.Td2a8ffexecute_sqlTb4b4b4(Ta5d6ff"Ta5d6ffUPDATE settings SET value = 4 WHERE key = Ta5d6ff'Ta5d6ffdb_versionTa5d6ff'Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffdatabase upgraded to version 4Ta5d6ff"Tb4b4b4)
T8b949e# run the function again (will perform migrations to next version if available)
Te6edf3perform_migrationsTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3current_db_version Tff7b72== T79c0ff4Tb4b4b4:
T8b949e# add main page info to database
Te6edf3mainTff7b72.Td2a8ffexecute_sqlTb4b4b4(
Ta5d6ff"Ta5d6ffINSERT INTO settings (key, value) VALUES (Ta5d6ff'Ta5d6ffmain_page_infoTa5d6ff'Ta5d6ff, Ta5d6ff'Ta5d6ff`!A forum on the NomadNetwork`!Ta5d6ff'Ta5d6ff)Ta5d6ff"
Tb4b4b4)
T8b949e# change database version
Te6edf3mainTff7b72.Td2a8ffexecute_sqlTb4b4b4(Ta5d6ff"Ta5d6ffUPDATE settings SET value = 5 WHERE key = Ta5d6ff'Ta5d6ffdb_versionTa5d6ff'Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffdatabase upgraded to version 5Ta5d6ff"Tb4b4b4)
T8b949e# run the function again (will perform migrations to next version if available)
Te6edf3perform_migrationsTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tffa657printTb4b4b4(
Ta5d6fffTa5d6ff"Ta5d6ffERROR: no migrations found! (Tffd700{Te6edf3current_db_versionTffd700}Ta5d6ff -> Tffd700{Te6edf3confTff7b72.Td2a8ffDB_VERSIONTffd700}Ta5d6ff)Ta5d6ff"
Tb4b4b4)
Tff7b72if Tff7b72__name__ Tff7b72== Ta5d6ff"Ta5d6ff__main__Ta5d6ff"Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3sysTff7b72.Td2a8ffpathTff7b72.Td2a8ffextendTb4b4b4(
Tb4b4b4[Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffabspathTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffdirnameTb4b4b4(Tff7b72__file__Tb4b4b4)Tb4b4b4, Te6edf3osTff7b72.Td2a8ffpardirTb4b4b4)Tb4b4b4)Tb4b4b4]
Tb4b4b4)
Tff7b72import T7ee787main
Tff7b72from T7ee787main Tff7b72import Te6edf3conf
Te6edf3mainTff7b72.Td2a8ffsetup_dbTb4b4b4(Te6edf3open_for_migrationTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3current_db_version Tff7b72= Tffa657intTb4b4b4(
Te6edf3mainTff7b72.Td2a8ffquery_databaseTb4b4b4(Ta5d6ff"Ta5d6ffSELECT value FROM settings WHERE key = Ta5d6ff'Ta5d6ffdb_versionTa5d6ff'Ta5d6ff"Tb4b4b4)Tb4b4b4[
T79c0ff0
Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]
Tb4b4b4)
Te6edf3mainTff7b72.Td2a8ffclose_databaseTb4b4b4(Tb4b4b4)
Te6edf3manageTff7b72.Td2a8ffcreate_backupTb4b4b4(Ta5d6ff"Ta5d6ff_before-migration_dbverTa5d6ff" Tff7b72+ Tffa657strTb4b4b4(Te6edf3current_db_versionTb4b4b4)Tb4b4b4)
Te6edf3mainTff7b72.Td2a8ffsetup_dbTb4b4b4(Te6edf3open_for_migrationTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3perform_migrationsTb4b4b4(Tb4b4b4)
Te6edf3mainTff7b72.Td2a8ffclose_databaseTb4b4b4(Tb4b4b4)
Tff7b72exceptTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffAn error occuredTa5d6ff"Tb4b4b4)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────